package com.itxiaowu.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itxiaowu.dao.CheckGroupDao;
import com.itxiaowu.entity.PageResult;
import com.itxiaowu.entity.QueryPageBean;
import com.itxiaowu.pojo.CheckGroup;
import com.itxiaowu.pojo.CheckItem;
import com.itxiaowu.service.CheckGroupService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service(interfaceClass = CheckGroupService.class)
@Transactional
public class CheckGroupServiceImpl implements CheckGroupService {

    @Autowired
    private CheckGroupDao checkGroupDao;
    /**
     * 查询分页信息
     *
     * @param queryPageBean
     */
    @Override
    public PageResult findPage(QueryPageBean queryPageBean) {

        //利用 PageHelper 提供的分页方法进行处理
        PageHelper.startPage(queryPageBean.getCurrentPage(),queryPageBean.getPageSize());

        /*调用dao层根据查询条件获得信息*/
        Page<CheckGroup> page = checkGroupDao.findPage(queryPageBean.getQueryString());

        /*返回分页查询结果*/
        return new PageResult(page.getTotal(),page.getResult());
    }

    /**
     * 添加检查项
     *
     * @param checkitemIds
     * @param checkGroup
     */
    @Override
    public void addCheckGroup(Integer[] checkitemIds, CheckGroup checkGroup) {
        
        /*1:添加检查组，并返回检查组的主键值作为中间表的值*/
        checkGroupDao.addCheckGroup(checkGroup);

        System.out.println(checkGroup + " 查看id主键值" + checkGroup.getId());

        /*2:将主键值作为外键进行第三张表的添加*/
        setCheckGroupAndCheckItem(checkGroup.getId(),checkitemIds);
    }

    /**
     * 根据id 查询数据
     *
     * @param id
     * @return
     */
    @Override
    public CheckGroup queryById(Integer id) {
        return checkGroupDao.queryById(id);
    }

    /**
     * 查询全部的检查组信息
     */
    @Override
    public List<CheckGroup> findAll() {
        return checkGroupDao.findAll();
    }

    /**
     * 根据检查组查询第三者表的数据
     *
     * @param id
     * @return
     */
    @Override
    public List<Integer> findById(Integer id) {

        return checkGroupDao.findById(id);

    }

    /**
     * 编辑检查组信息及和检查项的关系
     *
     * @param checkitemIds
     * @param checkGroup
     */
    @Override
    public void edit(Integer[] checkitemIds, CheckGroup checkGroup) {

        //1:修改检查组信息
        checkGroupDao.edit(checkGroup);
        //2:删除第三张表相关联的数据
        checkGroupDao.deleteRealtion(checkGroup.getId());
        //3:修改检查组和检查项的信息
        setCheckGroupAndCheckItem(checkGroup.getId(),checkitemIds);

    }

    /**
     * 根据id删除
     *
     * @param id
     */
    @Override
    public void delete(Integer id) {
        //1:先删除关系
        checkGroupDao.deleteRealtion(id);
        //2:删除 检查组
        checkGroupDao.delete(id);
    }


    /**
     * 设置检查组和检查项的关系
     */
    public void setCheckGroupAndCheckItem(Integer checkGroupId, Integer[] checkItemIds) {
        if(checkItemIds == null || checkItemIds.length == 0){
            return;
        }
        /*遍历每一个检查项和检查组进行关联*/
        for (int id : checkItemIds) {
            Map<String,Integer> hash = new HashMap<>();
            hash.put("checkitem_id",id);
            hash.put("checkgroup_id",checkGroupId);

            /*调用dao层方法*/
            checkGroupDao.setCheckGroupAndCheckItem(hash);
        }

    }


}
